define([
    'text!sysmonitoring/datarecovery/templates/DataRecovery.html',
    'sysmonitoring/datarecovery/views/Search'
], function(DataRecoveryViewTpl, SearchView) {
    var hasRuns = [];
    return fish.View.extend({
        template: fish.compile(DataRecoveryViewTpl),
        i18nData: fish.extend({}),
        events: {},

        initialize: function() {
            //this.on('ACC_PROC_STEP_VIEW_RELOADDATA_EVENT', $.proxy(this._reloadStepListHandler, this));
            this.setViews({
                '.search-view': [new SearchView()]
            });
            //定义流程数据编辑/添加完的加载事件
            fish.on('DATARECOVERY_SERACH', $.proxy(this.reloadGrid, this));
        },

        serialize: function() {
            return this.i18nData;
        },

        //这里用来初始化页面上要用到的fish组件
        afterRender: function() {
            var me = this;
            me.loadGrid();
            me.loadOperation();
            me.getPerData(1);
        },
        loadGrid: function(){
            var me = this;
            $grid = me.$("#dataRecovery-grid").grid({
                datatype: "json",
                // minHeight: 100,
                height: 350,
                colModel: [{
                    name: 'dmTaskId',
                    label: '任务ID',
                    width: 50,
                    sortable: false,
                    key: true,
                    formatter:function(cellval, opts, rwdat, _act){
                        return '<label class="checkbox-inline"><input type="checkbox" labelId='+rwdat.dmTaskId+'>'+cellval+'</label>';                  
                    }
                }, {
                    name: 'name',
                    label: '任务名称',
                    sortable: false
                }, {
                    name: 'planName',
                    label: '所属计划',
                    sortable: false
                }, {
                    name: 'state',
                    label: '状态',
                    sortable: false,
                    width: 50,
                    align:'center',
                    formatter: function(cellval, opts, rwdat, _act){
                        if(cellval == '00S'){
                            return '已完成';
                        }else if(cellval == '0DS'){
                            return '执行中';
                        }else if(cellval == '0SF'){
                            return '失败';
                        }else if(cellval == '00A'){
                            return '清理完成';
                        }
                    }
                }, {
                    name: 'startTime',
                    label: '任务开始时间',
                    sortable: false,
                    width: 100,
                    align:'center'
                }, {
                    name: 'endTime',
                    label: '任务结束时间',
                    sortable: false,
                    width: 100,
                    align:'center'
                }, {
                    name: '数据恢复',
                    formatter: 'actions',
                    classes: 'text-primary',
                    width: 50,
                    sortable: false,
                    formatoptions: {
                        editbutton: false, //默认开启编辑功能
                        delbutton: false, //默认开启删除功能
                        inlineButtonAdd: [{ //可以给actions类型添加多个icon图标,事件自行控制
                            id: "jdelButton", //每个图标的id规则为id+"_"+rowid
                            className: "datarecovery-run", //每个图标的class
                            icon: "glyphicon glyphicon-play-circle", //图标的样子
                            title: "启动" //鼠标移上去显示的内容
                        }, { //可以给actions类型添加多个icon图标,事件自行控制
                            id: "jPlayButton", //每个图标的id规则为id+"_"+rowid
                            className: "datarecovery-backup", //每个图标的class
                            icon: "glyphicon glyphicon-play", //图标的样子
                            title: "恢复完成" //鼠标移上去显示的内容
                        }]
                    }
                }],
                rowNum: 15,
                rowList : [15,20,25],
                pager: true,
                pageData: me.getPerData
            });

            // 启动 按钮功能
            $grid.on("click", ".datarecovery-run", function(e) {
                var data = $grid.grid("getSelection");

                var added = false;
                var hasRun = false;
                for(var k = 0; k < hasRuns.length; k++){
                    if(hasRuns[k].dmTaskId == data.dmTaskId){
                        if(hasRuns[k].hasRun == true){
                            hasRun = true;
                        }
                        added = true;
                        break;
                    }
                }
                if(!added){
                    var hasRunObj = {};
                    hasRunObj.dmTaskId = data.dmTaskId;
                    hasRunObj.hasRun = false;
                    hasRuns.push(hasRunObj);
                }

                if(hasRun){
                    fish.toast('warn','数据恢复已启动，不能再次点击');
                    return;
                }
                if(data.state == '00S' || data.state == '0DS'){
                    fish.toast('warn','数据恢复正在执行或已完成，不能再次点击');
                    return;
                }
                for(var k = 0; k < hasRuns.length; k++){
                    if(hasRuns[k].dmTaskId == data.dmTaskId){
                        hasRuns[k].hasRun = true;
                        break;
                    }
                }
                fish.confirm("确认对该任务进行启动数据恢复操作?").result.then(function(){
                    fish.ajax({
                        url: ctx + '/datarecovery/dmdatarecovery/dataRecovery.do',
                        showMask: false,  //是否自动显式全局遮罩
                        showError: true, //在出现异常时自动显示异常信息，后台需要返回的数据格式：{code:'ERROR-1001',message:'登录失败'}
                        timeout: 5000,   //超过3秒显式全局遮罩，此参数在showMask为true时才有效
                        data: {dmTaskIds: data.dmTaskId},
                        beforeSend: function(){
                        },
                        complete: function(xhr, status){
                            var result = xhr.responseJSON;
                            if(result.success == 1){
                                if(result.subTable){
                                    fish.toast('error','该任务【' + result.subTable + '】存在关联分表或者从表，功能正在完善中，目前仅支持单表恢复。');
                                }else if(result.subTask){
                                    fish.toast('error','该任务【' + result.subTask + '】下存在子任务，且子任务未完成或者未取消，请前往“系统监控”取消子任务后在启动数据恢复。');
                                // }else if(result.subTaskIsRun){
                                //     fish.toast('error','同一计划下的任务同时启动数据恢复，请根据需求，按顺序一个一个统一计划下的执行任务。');
                                }else if(result.noRecoveryTask){
                                    fish.toast('error','该任务【' + result.noRecoveryTask + '】的目标表没有“dm_task_id”和“dm_detail_id”这两个字段，不能进行数据恢复。');
                                }else{
                                    fish.toast('success','数据恢复启动成功');
                                    setTimeout(function(){
                                        me.getPerData();
                                    },"5000");
                                }
                            }else{
                                fish.toast('error','数据恢复异常。');
                            }
                            for(var k = 0; k < hasRuns.length; k++){
                                if(hasRuns[k].dmTaskId == data.dmTaskId){
                                    hasRuns[k].hasRun = false;
                                    break;
                                }
                            }
                        },
                        //【注意】如果你在这里配置了自己的error处理函数，fish.ajax就不会自动帮你显示异常信息了！
                        error:function(){
                        }
                    });
                });
            });

            // 恢复完成 按钮功能
            $grid.on("click", ".datarecovery-backup", function(e) {
                var data = $grid.grid("getSelection");
                if(data.state != '00S'){
                    fish.toast('warn','数据恢复还未完成或失败');
                    return;
                }
                fish.confirm("确认对该任务进行恢复完成操作?").result.then(function(){
                    fish.ajax({
                        url: ctx + '/datarecovery/dmdatarecovery/dataRecoveryOK.do',
                        showMask: false,  //是否自动显式全局遮罩
                        showError: true, //在出现异常时自动显示异常信息，后台需要返回的数据格式：{code:'ERROR-1001',message:'登录失败'}
                        timeout: 5000,   //超过3秒显式全局遮罩，此参数在showMask为true时才有效
                        data: {dmTaskIds: data.dmTaskId},
                        beforeSend: function(){
                        },
                        complete: function(xhr, status){
                            if(xhr.responseText == 1){
                                fish.toast('success','恢复完成操作成功');
                            }
                        },
                        //【注意】如果你在这里配置了自己的error处理函数，fish.ajax就不会自动帮你显示异常信息了！
                        error:function(){
                        }
                    });
                });
            });
        },
        getPerData: function(page, rowNum, sortname, sortorder, queryParam) { //请求服务器获取数据的方法
            var me = this;
            rowNum = rowNum || $("#dataRecovery-grid").grid("getGridParam", "rowNum");
            page = page || $("#dataRecovery-grid").grid("getGridParam", "page");
            start = (page - 1) * rowNum;
            start = start < 0 ? 0 : start;
            var queryParam = queryParam || {};
            fish.extend(queryParam, {
                page: page,
                limit: rowNum,
                start: start
            });
            $.ajax({
                    url: ctx + '/datarecovery/dmdatarecovery/queryRecordByPageForDataRecovery.do',
                    async: false,
                    type: 'POST',
                    data: queryParam
                }).done(function(serverData, textStatus, jqXHR) {
                    var result = {
                        "rows": serverData.resultList,
                        "page": serverData.page,
                        "records": serverData.totalRecords,
                        "total": serverData.totalPages,
                        "id": "dmTaskId"
                    };
                    $("#dataRecovery-grid").grid("reloadData", result);
                    return false;
                })
                .fail(function() {
                    // toastr.error("网络连接失败", "失败");
                }).always(function() {
                    $.unblockUI();
                });
            return false;
        },

        reloadGrid: function(queryParam){
            var result = this.getPerData(1, null, null, null, queryParam);
        },

        loadOperation: function(){
            var me = this;
            // 启动 按钮操作
            $('#run-btn-datarecovery').click(function(){
                var flag = true;
                var records = $grid.grid("getRowData");
                var str="";

                var added = false;
                var hasRun = false;
                $('input[type="checkbox"]:checked').each(function(){
                    if ($(this).attr("labelId")) {
                        // 判断选中的记录的状态
                        for(var i = 0; i < records.length; i++){// records[i].dmTaskId
                            for(var k = 0; k < hasRuns.length; k++){
                                if(hasRuns[k].dmTaskId == records[i].dmTaskId){
                                    if(hasRuns[k].hasRun == true){
                                        hasRun = true;
                                    }
                                    added = true;
                                    break;
                                }
                            }
                            if(!added){
                                var hasRunObj = {};
                                hasRunObj.dmTaskId = records[i].dmTaskId;
                                hasRunObj.hasRun = false;
                                hasRuns.push(hasRunObj);
                            }
                        }
                    }
                });

                if(hasRun){
                    fish.toast('warn','数据恢复已启动，不能再次点击');
                    return;
                }
                $('input[type="checkbox"]:checked').each(function(){
                    if ($(this).attr("labelId")) {
                        // 判断选中的记录的状态
                        for(var i = 0; i < records.length; i++){
                            if(records[i].dmTaskId == $(this).attr("labelId")){
                                if(records[i].state == '00S' || records[i].state == '0DS'){
                                    flag = false;
                                    return;
                                }
                            }
                        }
                        str += $(this).attr("labelId") + ",";
                    }
                });
                if(!flag){
                    fish.toast('warn','数据恢复正在执行或已完成，不能再次点击');
                    return;
                }
                if (str != "" || str != undefined) {
                    str = str.substring(0,str.length-1);
                }
                if (str.length == 0) {
                    fish.toast('info','请至少选择一条记录');
                } else {
                    var dmTaskIds = str.split(",");
                    for(var i = 0; i < dmTaskIds.length; i++){
                        for(var k = 0; k < hasRuns.length; k++){
                            if(hasRuns[k].dmTaskId == dmTaskIds[i]){
                                hasRuns[k].hasRun = true;
                                break;
                            }
                        }
                    }
                    
                    fish.confirm("确认对这些任务进行启动数据恢复操作?").result.then(function(){                        
                        fish.ajax({
                            url: ctx + '/datarecovery/dmdatarecovery/dataRecovery.do',
                            showMask: false,  //是否自动显式全局遮罩
                            showError: true, //在出现异常时自动显示异常信息，后台需要返回的数据格式：{code:'ERROR-1001',message:'登录失败'}
                            timeout: 5000,   //超过3秒显式全局遮罩，此参数在showMask为true时才有效
                            data: {dmTaskIds: str},
                            beforeSend: function(){
                            },
                            complete: function(xhr, status){
                                var result = xhr.responseJSON;
                                if(result.success == 1){
                                    if(result.subTable){
                                        fish.toast('error','该任务【' + result.subTable + '】存在关联分表或者从表，功能正在完善中，目前仅支持单表恢复。');
                                    }else if(result.subTask){
                                        fish.toast('error','该任务【' + result.subTask + '】下存在子任务，且子任务未完成或者未取消，请请往“系统监控”取消子任务后在启动数据恢复。');
                                    }else if(result.noRecoveryTask){
                                        fish.toast('error','该任务【' + result.noRecoveryTask + '】的目标表没有“dm_task_id”和“dm_detail_id”这两个字段，不能进行数据恢复。');
                                    }else{
                                        fish.toast('success','数据恢复启动成功');
                                        setTimeout(function(){
                                            me.getPerData();
                                        },"5000");
                                    }
                                }else{
                                    fish.toast('error','数据恢复异常。');
                                }
                                for(var i = 0; i < dmTaskIds.length; i++){
                                    for(var k = 0; k < hasRuns.length; k++){
                                        if(hasRuns[k].dmTaskId == dmTaskIds[i]){
                                            hasRuns[k].hasRun = false;
                                            break;
                                        }
                                    }
                                }
                            },
                            //【注意】如果你在这里配置了自己的error处理函数，fish.ajax就不会自动帮你显示异常信息了！
                            error:function(){
                            }
                        });
                    });
                }
            });
            // 恢复完成 按钮操作
            $('#backup-btn-datarecovery').click(function() {
                var flag = true;
                var records = $grid.grid("getRowData");
                var str="";
                $('input[type="checkbox"]:checked').each(function(){
                    if ($(this).attr("labelId")) {
                        // 判断选中的记录的状态
                        for(var i = 0; i < records.length; i++){
                            if(records[i].dmTaskId == $(this).attr("labelId")){
                                if(records[i].state != '00S'){
                                    flag = false;
                                    return;
                                }
                            }
                        }
                        str += $(this).attr("labelId") + ",";
                    }
                });
                if(!flag){
                    fish.toast('warn','数据恢复还未完成或失败');
                    return;
                }
                if (str != "" || str != undefined) {
                    str = str.substring(0,str.length-1);
                }
                if (str.length == 0) {
                    fish.toast('info','请至少选择一条记录');    
                } else {
                    fish.confirm("确认对这些任务进行恢复完成操作?").result.then(function(){                      
                        fish.ajax({
                            url: ctx + '/datarecovery/dmdatarecovery/dataRecoveryOK.do',
                            showMask: false,  //是否自动显式全局遮罩
                            showError: true, //在出现异常时自动显示异常信息，后台需要返回的数据格式：{code:'ERROR-1001',message:'登录失败'}
                            timeout: 5000,   //超过3秒显式全局遮罩，此参数在showMask为true时才有效
                            data: {dmTaskIds: str},
                            beforeSend: function(){
                            },
                            complete: function(xhr, status){
                                if(xhr.responseText == 1){
                                    fish.toast('success','恢复完成操作成功');
                                }
                            },
                            //【注意】如果你在这里配置了自己的error处理函数，fish.ajax就不会自动帮你显示异常信息了！
                            error:function(){
                            }
                        });
                    });
                }
            });
        }
    });
});
